package com.projet.word;

import cn.hutool.core.io.FileUtil;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class FtlToWordMain {
    public static void main(String[] args) {
        try {
            //https://blog.csdn.net/shenbushen/article/details/70169832
            //https://blog.csdn.net/weixin_43356308/article/details/124374329
            //1、新建word文档，不要直接用&{} 建议AAA,BBB,CCC这样，特殊字符可能不是一个段；
            //2、另存为XML；
            //3、替换特殊字符，为${AAAA},可以用freemarker或者直接文字
            //涉及到循环类的使用freemarker工具会好点
            // 加载Word文档
            File file = new File("C:\\Users\\Administrator\\Desktop\\word\\wordftl.xml");
            File outFile = new File("C:\\Users\\Administrator\\Desktop\\word\\" + System.currentTimeMillis() + ".docx");
            List<WordParam> params = new ArrayList<>();
            //注意 ${标签} 这些字符的font和size，颜色必须完全统一，要不XWPFRun不会在一个里面
            params.add(new WordParam().setKey("AAAA").setContent("你好\n测试"));
            params.add(new WordParam().setKey("BBBB").setContent("李  磊：15904608959，0430-48974785\n韩梅梅：15904608959\n韩梅梅：15904608959\n韩梅梅：15904608959\n注意安全"));
            // 保存修改后的文档
            String inTxt = new String(Files.readAllBytes(Paths.get(file.getAbsolutePath())));
            String outTxt = replaceText(inTxt, params);
            FileUtil.writeBytes(outTxt.getBytes(), outFile);
            System.out.println("完成！");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //开始符
    private static final String VAR_BEGIN = "${";
    //结束符
    private static final String VAR_END = "}";

    /**
     * 匹配传入信息集合与模板
     *
     * @param inText 模板需要替换的区域
     * @param params 传入信息集合
     * @return 模板需要替换区域信息集合对应值
     */
    public static String replaceText(String inText, List<WordParam> params) {
        String key;
        String value;
        String text = inText;
        for (WordParam param : params) {
            key = VAR_BEGIN + param.getKey() + VAR_END;
            if (text.indexOf(key) != -1) {
                value = param.getContent();
                if (value == null) {
                    value = "";
                } else {
                    // 替换参数的换行符
                    value = value.replaceAll("\r\n", "<w:br/>")
                            .replaceAll("\r", "<w:br/>")
                            .replaceAll("\n","<w:br/>");

                }
                text = text.replace(key, value);
            }
        }
        return text;
    }
}
